/**
 * 十六进制
 * 
 * 工具类  ByteArray转换十六进制字符或字符串类型。
 * 版权(c)2007亨利Torgemane
 * 
 */
package zf.data.crypto
{
	import flash.utils.ByteArray;
	
	/**
	 * 16进制类 
	 * @author 2007 亨利 Torgemane
	 * 
	 */
	public class Hex
	{
		/**
		 * 字符串转换为2进制数组
		 * @param hex 字符串
		 * @return ByteArray
		 * 
		 */
		public static function toArray(hex:String):ByteArray
		{
			hex = hex.replace(/\s|:/gm,'');
			var a:ByteArray = new ByteArray  ;
			if (hex.length & 1 == 1)
			{
				hex = "0" + hex;
			}
			for (var i:uint=0; i<hex.length; i+=2)
			{
				a[i / 2] = parseInt(hex.substr(i,2),16);
			}
			return a;
		}
		
		/**
		 * 转化为字符串 
		 * @param array ByteArray二进制数组
		 * @param colons 是否添加冒号 :
		 * @return 字符串
		 * 
		 */
		public static function fromArray(array:ByteArray, colons:Boolean=false):String
		{
			var s:String = "";
			for (var i:uint=0; i<array.length; i++)
			{
				s +=  ("0" + array[i].toString(16)).substr(-2,2);
				if (colons)
				{
					if (i<array.length-1)
					{
						s +=  ":";
					}
				}
			}
			return s;
		}
		
		
		/**
		 * 字符串从 utf-8 解码成十六进制
		 * @param hex 字符串
		 * @return 十六进制字符串
		 * 
		 */
		public static function toString(hex:String):String
		{
			var a:ByteArray = toArray(hex);
			return a.readUTFBytes(a.length);
		}
		
		
		/**
		 * 十六进制字符串编码成utf-8字符串
		 * @param str 十六进制字符串
		 * @param colons 是否添加冒号 :
		 * @return 字符串
		 * 
		 */
		public static function fromString(str:String, colons:Boolean=false):String
		{
			var a:ByteArray = new ByteArray  ;
			a.writeUTFBytes(str);
			return fromArray(a, colons);
		}
		
	}
}